<?php

set_time_limit(0);

/**
 * Projeto Euler
 *
 * Problema #1
 *
 * Questão:
 *
 * The prime factors of 13195 are 5, 7, 13 and 29.
 * What is the largest prime factor of the number 600851475143 ?
 **/

$targetNumber = 600851475143;
$targetNumber = 512321;
$targetNumber = 13195;
$maxPrime = 0;
$ignorado = "";

/**
 * Método para resgatar todos os numeros primos do 1 até o número informado
 *
 * retorna a saída em um array
 **/
function getAllPrimes( $number )
{
    $primes = array();
    $ultimo = 0;

    //percorrendo todos os números possíveis
    for( $y = 1; $y < $number; $y++ )
    {
        //
    }
}

/**
 * Method to check if the informed number is prime
 *
 * return true or false
 **/
function isPrime( $number )
{
    $number = abs( $number );

    $prime  = true;

    if( $number > 0 )
    {
        for( $y = 1; $y <= $number; $y++ )
        {
            //usado explode para identificar divisão exata, pois uso um sistema de 32bits que não suporta corretamente números muito grandes como 600851475143
            $calc = explode('.', $number / $y);

            if( sizeof($calc) <= 1 && $y != 1 && $y != $number )
            {
                $prime = false;
                break;
            }
        }
    }

    return $prime;
}

/**
 * Methos recursively to find the largest prime factor of the number informed
 **/
function findLargestPrime( &$targetNumber, &$maxPrime )
{
    for( $y = 1; $y <= $targetNumber; $y++ )
    {
        //check if current index is prime
        if( isPrime($y) )
        {
            //usado explode para identificar divisão exata, pois uso um sistema de 32bits que não suporta corretamente números muito grandes como 600851475143
            $calc = explode('.', $targetNumber / $y);

            if( sizeof($calc) <= 1 )
            {
                $targetNumber = $targetNumber / $y;

                //set max prime
                if( $y > $maxPrime )
                {
                    $maxPrime = $y;
                    $y = 1;
                }
            }
        }
    }
}

findLargestPrime( $targetNumber, $maxPrime );

echo 'Primo: ' . $maxPrime . '<br /><br />';

?>
